//
// Created by wangliewei on 2021/8/12.
// 整数二分
#include<iostream>
using namespace std;

const int N = 1e6 + 10;

int q[N];


int main(){

    int n, m;
    scanf("%d%d", &n, &m);
    for (int i = 0; i < n; i++) scanf("%d", &q[i]);

    //整体思路是先找x的左边界，如果找到再找右边界
    while (m--){

        int x;
        scanf("%d",&x);

        int l = 0, r = n - 1;

        while (l < r) {
            int mid = l + r >> 1;
            if(q[mid] >= x) r = mid; //如果把这里改成大于，那么最后得到的l就是第一个大于x的数
            else l = mid + 1;
        }//如果q中没有x，那么最后找到的是第一个大于等于x的数

        if (q[l] != x) cout << "-1 -1" << endl;//没有找到
        else{
            cout << l << " "; //这个是最左变的x，因为上面的性质是大于等于x

            int l = 0, r = n - 1;
            while (l < r){
                int mid = l + r + 1 >> 1;//因为是l=mid, 所以这里要加1
                //因为如果不加1，当l=r-1的时候，mid还是l，就会陷入死循环
                if (q[mid] <= x) l = mid;
                else r = mid -1;
            }

            cout << l << endl;
        }

    }

    return 0;
}







